查看原文
其他

十分钟入门pandas(下)【解读pandas官方文档】

2017-06-28 王大伟 Python爱好者社区

(点击上方Python爱好者社区,可快速关注)

作者:王大伟

博客专栏:https://www.hellobi.com/u/wangdawei/articles

Python爱好者社区  唯一小编 

(文末有新福利 

前言

前文传送门:

十分钟入门pandas(上)【解读pandas官方文档】

十分钟入门pandas(中)【解读pandas官方文档】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

数据透视表

查看更多内容:http://pandas.pydata.org/pandas-docs/version/0.20/reshaping.html#reshaping-pivot

import datetime

注:导入时间模块

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 6,
                  'B': ['A', 'B', 'C'] * 8,
                  'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                  'D': np.random.randn(24),
                  'E': np.random.randn(24),
                  'F': [datetime.datetime(2013, i, 1) for i in range(1, 13)] +
                       [datetime.datetime(2013, i, 15) for i in range(1, 13)]})
df


注:创建了一个dataframe

我们可以很容易地从这些数据生成数据透视表:

pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])


注:数据透视表玩法很多,大家通过帮助文档好好研究下


时间序列

pandas具有简单,强大和高效的功能,用于在频率转换期间执行重采样操作(例如,将数据转换为5分钟数据)。 这在金融应用中非常常见,但不限于此。 请参阅时间序列部分:http://pandas.pydata.org/pandas-docs/version/0.20/timeseries.html#timeseries

rng = pd.date_range('1/1/2012', periods=100, freq='S')
rng

                                                                            。。。。。。

                              

首先创建了一个100秒时间戳的系列,s为second的意思。

频率:字符串或pandas偏移对象,可选 一个pandas日期偏移字符串或相应的对象

ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
ts

将刚产生的时间序列rng作为索引index,随机产生0-500之间的整数作为值。


                    。。。。。。



将该系列缩小为5分钟,就是五分钟采样一次,并对其值进行求和:

ts.resample('5Min').sum()

时区表示

rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')
rng


注:产生5个数的时间序列,偏移量为D:Day,日期


ts = pd.Series(np.random.randn(len(rng)), rng)
ts


注:将产生的日期作为索引,产生日起数量(5个)的标准正态分布的数值


本地化时区表示:

ts_utc = ts.tz_localize('UTC')
ts_utc



转换成其他时区:

ts_utc.tz_convert('US/Eastern')


在时间跨度表示之间转换:

rng = pd.date_range('1/1/2012', periods=5, freq='M')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ts


ps = ts.to_period()
ps


注:将时间日期索引转化为时间阶段索引(这里是用月份表示)


ps.to_timestamp()


注:用月份的初始日期表示


分类

自版本0.15以来,pandas可以在DataFrame中包含分类数据。 有关完整文档,请参阅分类介绍:http://pandas.pydata.org/pandas-docs/version/0.20/categorical.html#categorical

和API文档:http://pandas.pydata.org/pandas-docs/version/0.20/api.html#api-categorical

df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
df


将原始成绩转换为分类数据类型:

df["grade"] = df["raw_grade"].astype("category")
df["grade"]


注:显示成绩可以分为三类


将类别重命名为更有意义的名称

df["grade"].cat.categories = ["very good", "good", "very bad"]
df["grade"]


注:显示的就是分类信息了


df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])
df["grade"]


注:显示的就是分类信息了


排序是按类别中的顺序排列的,而不是词法顺序

df.sort_values(by="grade")


注:根据成绩排序


按分类列分组还显示空类:

df.groupby("grade").size()


注:统计分类后每类元素个数


绘图

绘图更多用法:http://pandas.pydata.org/pandas-docs/version/0.20/visualization.html#visualization

import matplotlib.pyplot as plt

注:导入绘图模块

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
tts.cumsum()s.plot()
plt.show()


注:绘制时间序列图形,ts.cumsum()为累积值,绘图必须使用show()方法才能展现出来图。


在DataFrame中,plot()可以方便地绘制带有标签的所有列:

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
plt.figure()
df.plot()
plt.legend(loc='best')
plt.show()



获取数据输入/输出

CSV

写入csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-store-in-csv

df.to_csv('foo.csv')

读取csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-read-csv-table

pd.read_csv('foo.csv')


                                                                  。。。。。。



Excel

读取和写入Excel文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-excel

写入Excel:

df.to_excel('foo.xlsx', sheet_name='Sheet1')

读取Excel:

pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])


                                     。。。。。。             



易错点

如果你操作时遇到类似这种问题:


你可以看看这里的解释寻求帮助:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-compare

也可以参考这里:http://pandas.pydata.org/pandas-docs/version/0.20/gotchas.html#gotchas

花了一天半时间把10分钟入门pandas官方文档解读了一下,大家有兴趣可以深入了解官方文档的内容,或者用到某部分再去查文档也是很ok的,哈哈。

感谢你的阅读~

新福利:Kenny 7月11日在Hellobi Live直播 《自然语言处理之-基于深度学习技术的诗歌写作机器人内容:

1、 写诗机器人效果展示

2、 基于深度学习写诗机器人训练数据收集,清洗,导入

3、 诗歌数据预处理,特征化和数值化后转化为可训练的数据

4、 写诗机器人模块介绍

5、 写诗机器人算法介绍

6、 写诗机器人的实现及效果评估

付费参加方式:点击阅读原文报名

免费参加方式:长按下图,关注公众号Python爱好者社区,在菜单栏点击免费听课参加活动

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。


长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存